package main.java;

/**
 * @program: pratice
 * @author: 关键我是大怪
 * @create: 2021-09-10 14:56
 */

/**
 * 题目：
 * 给定一个含有n个正整数的数组和一个正整数 target 。
 * 找出该数组中满足其和 ≥ target的长度最小的连续子数组
 * [numsl, numsl+1, ..., numsr-1, numsr]，并返回其长度。如果不存在符合条件的子数组，
 * 返回 0 。
 */


public class Test20_和大于等于target的最短子数组 {
    public static int minSubArrayLen(int target, int[] nums) {
        int sum = 0;
        int left = 0;
        int min = Integer.MAX_VALUE;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
            while (sum >= target) {
                min = Math.min(min, i - left + 1);
                sum -= nums[left++];
            }
        }
        return min < Integer.MAX_VALUE ? min : 0;
    }

    public static void main(String[] args) {
        int[] a = new int[]{1, 4, 4};
        int i = minSubArrayLen(4, a);
        System.out.println(i);
    }
}
